Elasticsearch এ Query এবং Search দুটি গুরুত্বপূর্ণ ফিচার যা ডেটা সনাক্তকরণ ও রিট্রিভ করার জন্য ব্যবহৃত হয়। Elasticsearch একটি ডকুমেন্ট-ওরিয়েন্টেড ডিস্ট্রিবিউটেড সার্চ ইঞ্জিন, যা JSON ভিত্তিক ডকুমেন্ট স্টোর করে এবং কাস্টমাইজড এবং অত্যন্ত দ্রুত সার্চ করতে দেয়। নিচে Elasticsearch এর Query এবং Search এর বেসিক ব্যাখ্যা ও কিছু উদাহরণ দেওয়া হলো:
Elasticsearch Query
Elasticsearch এ Query হলো সার্চ করার জন্য ব্যবহৃত ক্রাইটেরিয়া। Query এর মাধ্যমে আপনি নির্দিষ্ট ফিল্ড, টার্ম, রেঞ্জ ইত্যাদি নির্দিষ্ট করে সার্চ করতে পারেন। Elasticsearch এ বিভিন্ন ধরনের query রয়েছে, যেমন:
- Match Query
- Term Query
- Range Query
- Bool Query
- Wildcard Query
- Query String Query
উদাহরণ: একটি সাধারণ match query
GET /my-index/_search
{
"query": {
"match": {
"field_name": "search_text"
}
}
}
উপরের query টি my-index নামে ইনডেক্সে field_name ফিল্ডে "search_text" খুঁজবে।
Search
Elasticsearch এ search API ডকুমেন্ট খুঁজে বের করার জন্য ব্যবহৃত হয়। Search API তে বিভিন্ন ধরনের query ইনপুট হিসেবে ব্যবহার করা যায়। এটি একটি RESTful API এবং HTTP GET এবং POST উভয় মাধ্যমেই ব্যবহার করা যায়।
Search এর সাধারণ উদাহরণ:
GET /my-index/_search
{
"query": {
"match_all": {}
}
}
উপরের query টি my-index ইনডেক্সে থাকা সব ডকুমেন্ট ফিরিয়ে দেবে।
Query Types and Examples
Match Query: এটি সাধারণত টেক্সট ফিল্ডে ম্যাচ করার জন্য ব্যবহৃত হয়।
{
"query": {
"match": {
"message": "Elasticsearch is awesome"
}
}
}
Term Query: এটি এক্স্যাক্ট টার্ম (নির্দিষ্ট শব্দ বা ভ্যালু) ম্যাচ করার জন্য ব্যবহৃত হয়।
{
"query": {
"term": {
"status": "published"
}
}
}
Bool Query: এটি লজিক্যাল অপারেশন (AND, OR, NOT) কম্বাইন করে ডিফল্ট ক্রাইটেরিয়া তৈরি করতে ব্যবহৃত হয়।
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "category": "tutorial" }}
],
"filter": [
{ "range": { "date": { "gte": "2022-01-01" }}}
]
}
}
}
Range Query: এটি রেঞ্জ বা নির্দিষ্ট মানের মধ্যে থাকা ডেটা ফিল্টার করতে ব্যবহৃত হয়, যেমন তারিখ বা সংখ্যা।
{
"query": {
"range": {
"price": {
"gte": 10,
"lte": 100
}
}
}
}
Wildcard Query: এটি wildcards (*, ?) ব্যবহার করে প্যাটার্ন অনুযায়ী সার্চ করতে ব্যবহৃত হয়।
{
"query": {
"wildcard": {
"username": "user*"
}
}
}
Aggregation এবং Filtering
Elasticsearch এ aggregation (ডেটা বিশ্লেষণ) এবং filtering (ডেটা ফিল্টার করা) খুবই গুরুত্বপূর্ণ। এটি মূলত মেট্রিক্স, হিস্টোগ্রাম, বা বিভিন্ন ধরনের চার্ট বা গ্রাফ তৈরি করতে ব্যবহার করা হয়।
Aggregation এর উদাহরণ:
{
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
Search Results
Elasticsearch এর সার্চ রেজাল্টে সাধারণত কিছু গুরুত্বপূর্ণ অংশ থাকে:
- hits: পাওয়া ডকুমেন্টগুলো।
- total: ডকুমেন্টের সংখ্যা।
- _score: রিলেভেন্স স্কোর, যা নির্দেশ করে কতটা রিলেভেন্ট ডকুমেন্টটি।
- _source: ডকুমেন্টের আসল JSON কনটেন্ট।
উপসংহার
Elasticsearch এর Query এবং Search এর মাধ্যমে আপনি ডকুমেন্টগুলো খুব দ্রুত এবং এফিশিয়েন্টলি খুঁজে বের করতে পারবেন। ইনডেক্স, টার্ম, ফিল্ড, এবং রেঞ্জের মতো কনসেপ্টগুলো ভালোভাবে বোঝার মাধ্যমে আপনি খুব সহজেই আপনার সার্চ সিস্টেমকে কাস্টমাইজড করতে পারবেন।
Elasticsearch Query DSL (Domain Specific Language) হলো একটি JSON-ভিত্তিক ভাষা, যা Elasticsearch এ ডেটা অনুসন্ধান এবং ফিল্টার করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন ধরনের query এবং ফিল্টার ব্যবহার করে ডকুমেন্ট অনুসন্ধান, ফিল্টারিং, এবং ডেটা বিশ্লেষণ করতে সাহায্য করে। Query DSL এর মাধ্যমে আপনি খুব সহজে কমপ্লেক্স সার্চ কন্ডিশন তৈরি করতে পারেন। নিচে এর বেসিক ধারণা ও কাঠামো নিয়ে আলোচনা করা হলো:
Query DSL এর দুটি প্রধান ক্যাটাগরি
- Leaf Query Clauses: এই ধরণের query ফিল্ডের একটি নির্দিষ্ট মান খোঁজার চেষ্টা করে। যেমন:
term,match, এবংrangeইত্যাদি। - Compound Query Clauses: এটি একাধিক query ক্লজকে একত্রিত করে আরও জটিল সার্চ লজিক তৈরি করে। যেমন:
bool,dis_max, এবংconstant_scoreইত্যাদি।
Leaf Query Clauses
Leaf query গুলো সরাসরি ডকুমেন্টের ফিল্ডের উপর অপারেশন করে। এগুলো সাধারণত নির্দিষ্ট একটি মান (value) এর উপর ভিত্তি করে ফিল্টার বা সার্চ করে। কিছু সাধারণ Leaf query উদাহরণ:
Match Query:
- এটি একটি টেক্সট ফিল্ডে ম্যাচ করার জন্য ব্যবহৃত হয় এবং এটি টোকেনাইজড করে সার্চ করে।
- উদাহরণ:
- উপরের উদাহরণে,
descriptionফিল্ডে"full text search"এর সাথে মিলে যায় এমন ডকুমেন্টগুলো রিটার্ন হবে।
{
"query": {
"match": {
"description": "full text search"
}
}
}
Term Query:
- এটি এক্স্যাক্ট টার্ম ম্যাচ করার জন্য ব্যবহৃত হয়, যা সাধারণত সংখ্যা বা কীওয়ার্ডের মতো ডেটার জন্য উপযুক্ত।
- উদাহরণ:
{
"query": {
"term": {
"status": "published"
}
}
}
Range Query:
- এটি নির্দিষ্ট মানের পরিসীমার মধ্যে থাকা ডেটা খুঁজে পেতে ব্যবহৃত হয়। যেমন সংখ্যা বা তারিখের মধ্যে সার্চ করা।
- উদাহরণ:
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 500
}
}
}
}
Compound Query Clauses
Compound query গুলো একাধিক query কে একত্রিত করে আরও জটিল কন্ডিশন তৈরি করতে ব্যবহৃত হয়। কিছু সাধারণ compound query উদাহরণ:
Bool Query:
- এটি বিভিন্ন query কে একত্রিত করে লজিক্যাল অপারেশন (AND, OR, NOT) পরিচালনা করতে ব্যবহৃত হয়।
- উদাহরণ:
- এখানে,
mustঅংশে দুটিmatchquery এবংfilterঅংশে একটিrangequery আছে। সবগুলো কন্ডিশন পূরণ করতে হবে ডকুমেন্ট ম্যাচ করতে।
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "category": "search engine" }}
],
"filter": [
{ "range": { "date": { "gte": "2023-01-01" }}}
]
}
}
}
Dis Max Query:
- এটি বিভিন্ন query থেকে সর্বোচ্চ স্কোর পাওয়া ডকুমেন্টগুলোকে রিট্রিভ করতে ব্যবহৃত হয়।
- উদাহরণ:
{
"query": {
"dis_max": {
"queries": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "description": "full text search" }}
],
"tie_breaker": 0.3
}
}
}
Constant Score Query:
- এটি একটি ফিক্সড স্কোর দিয়ে query রেজাল্ট রিট্রিভ করে। এটি নির্দিষ্ট মানের ফিল্টারিং করার জন্য বেশ কার্যকর।
- উদাহরণ:
{
"query": {
"constant_score": {
"filter": {
"term": { "status": "published" }
},
"boost": 1.5
}
}
}
Query DSL এর অন্যান্য গুরুত্বপূর্ণ অংশ
- Filtering:
- Query DSL এ filtering এর মাধ্যমে আপনি ডকুমেন্ট গুলো ফিল্টার করে নির্দিষ্ট subset তৈরি করতে পারেন। এটি সাধারনত
boolquery এর মধ্যেfilterক্লজ হিসেবে ব্যবহৃত হয়।
- Query DSL এ filtering এর মাধ্যমে আপনি ডকুমেন্ট গুলো ফিল্টার করে নির্দিষ্ট subset তৈরি করতে পারেন। এটি সাধারনত
- Aggregation:
- এটি ডেটা এনালাইসিস করার জন্য ব্যবহার হয়, যেমন ডেটা গ্রুপ করে কাউন্ট করা, গড় বের করা, সর্বোচ্চ বা সর্বনিম্ন মান খোঁজা ইত্যাদি।
উপসংহার
Elasticsearch Query DSL এর মাধ্যমে আপনি বিভিন্ন ধরনের query তৈরি করতে পারবেন যা খুবই ফ্লেক্সিবল এবং পাওয়ারফুল। Query DSL এর বেসিক ধারণা ও কাঠামো ভালোভাবে বুঝে আপনি খুব সহজেই জটিল সার্চ কন্ডিশন তৈরি করতে এবং ডেটা ফিল্টারিং ও এনালাইসিস করতে পারবেন।
Elasticsearch এ Match, Term, এবং Range Query তিনটি অত্যন্ত গুরুত্বপূর্ণ এবং সাধারণভাবে ব্যবহৃত query, যা ডকুমেন্ট অনুসন্ধান এবং ফিল্টার করার জন্য ব্যবহৃত হয়। এদের প্রত্যেকটির নিজস্ব বৈশিষ্ট্য এবং ব্যবহার রয়েছে। নিচে এদের বেসিক ধারণা এবং উদাহরণ দিয়ে ব্যাখ্যা করা হলো:
1. Match Query
Match Query টেক্সট-ভিত্তিক ফিল্ডের মধ্যে টার্ম বা ফ্রেজ খুঁজে বের করার জন্য ব্যবহৃত হয়। এটি একটি বিশ্লেষণ প্রক্রিয়া (analyzer) ব্যবহার করে ইনডেক্স করা টেক্সটকে টোকেনাইজ করে এবং তারপর সার্চ টেক্সটের সাথে মিলানোর চেষ্টা করে।
বৈশিষ্ট্য:
- টেক্সট ফিল্ডের মধ্যে পূর্ণ টেক্সট সার্চ করার জন্য ব্যবহার করা হয়।
- এটি ইনডেক্স করা ডেটা এবং সার্চ করা টার্ম উভয়কে বিশ্লেষণ করে।
- এটি partial match বা আংশিক মিলের জন্য উপযুক্ত।
উদাহরণ:
GET /my-index/_search
{
"query": {
"match": {
"description": "Elasticsearch tutorial"
}
}
}
উপরের উদাহরণে, description ফিল্ডে "Elasticsearch tutorial" সম্পর্কিত টার্ম বা ফ্রেজ খুঁজে বের করবে। Elasticsearch টেক্সটটিকে টোকেনাইজ করে এবং ইনডেক্স করা ডেটার সাথে মিলিয়ে দেখে কোন ডকুমেন্টগুলো এই টার্মগুলো ধারণ করে।
2. Term Query
Term Query নির্দিষ্ট মান বা টার্ম খুঁজে বের করার জন্য ব্যবহৃত হয় এবং এটি ইনডেক্স করা ডেটাকে বিশ্লেষণ (analyze) করে না। এটি মূলত exact match এর জন্য উপযুক্ত এবং সাধারণত কীওয়ার্ড, সংখ্যা বা নির্দিষ্ট মান (যেমন স্ট্যাটাস, আইডি) খুঁজতে ব্যবহৃত হয়।
বৈশিষ্ট্য:
- Exact match বা সঠিক মিলের জন্য ব্যবহৃত হয়।
- এটি সাধারণত বিশ্লেষণ (analysis) প্রক্রিয়া চালায় না; ইনডেক্স করা ডেটা যেমন আছে, তেমনই ব্যবহার করে।
- সংখ্যা, কীওয়ার্ড বা যেসব ফিল্ড বিশ্লেষণ করা হয়নি (not_analyzed) সেগুলোর জন্য বেশি উপযুক্ত।
উদাহরণ:
GET /my-index/_search
{
"query": {
"term": {
"status": "published"
}
}
}
এই উদাহরণে, status ফিল্ডে "published" মান খুঁজে দেখা হবে। এটি সঠিকভাবে "published" মান ধারণ করে এমন ডকুমেন্টগুলোই রিটার্ন করবে।
3. Range Query
Range Query এমন ফিল্ডে অনুসন্ধান করে যেগুলোতে সংখ্যা, তারিখ, বা অন্যান্য পরিসীমা ভিত্তিক ডেটা রয়েছে। এটি নির্দিষ্ট মানের পরিসীমা বা রেঞ্জের মধ্যে থাকা ডকুমেন্টগুলোকে রিটার্ন করে।
বৈশিষ্ট্য:
- এটি সংখ্যা, তারিখ বা রেঞ্জ নির্ভর ফিল্ডের জন্য ব্যবহার করা হয়।
- বিভিন্ন অপারেটর যেমন
gte(greater than or equal),lte(less than or equal),gt(greater than),lt(less than) ব্যবহার করা হয়। - এটি রেঞ্জের মধ্যে থাকা ডকুমেন্টগুলোকে ফিল্টার করতে এবং রেঞ্জ অনুসারে সার্চ করতে উপযোগী।
উদাহরণ:
GET /my-index/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 500
}
}
}
}
উপরের উদাহরণে, price ফিল্ডের মধ্যে যেসব ডকুমেন্টের দাম ১০০ থেকে ৫০০ এর মধ্যে আছে সেগুলো রিটার্ন হবে। এখানে gte (greater than or equal) এবং lte (less than or equal) অপারেটর ব্যবহার করা হয়েছে।
সারাংশ
- Match Query: সাধারণত টেক্সট ফিল্ডের পূর্ণ টেক্সট সার্চ করার জন্য ব্যবহার হয়। এটি ইনডেক্স করা ডেটা এবং সার্চ করা টার্ম বিশ্লেষণ করে এবং আংশিক ম্যাচ খুঁজে পায়।
- Term Query: সঠিক বা নির্দিষ্ট মান খুঁজতে ব্যবহৃত হয়। এটি সংখ্যা, কীওয়ার্ড বা নির্দিষ্ট মানের ফিল্ডের জন্য উপযুক্ত।
- Range Query: এটি সংখ্যা, তারিখ বা অন্য রেঞ্জ ভিত্তিক ডেটা খুঁজে বের করার জন্য ব্যবহৃত হয়।
এগুলোর সাহায্যে আপনি Elasticsearch এ বিভিন্ন ধরনের ডেটা খুব সহজেই সার্চ করতে পারেন এবং সার্চ রেজাল্টকে আরও নির্দিষ্ট করতে পারেন।
Elasticsearch-এ Bool Query একটি শক্তিশালী কনস্ট্রাক্ট যা আপনাকে একাধিক শর্ত বা কন্ডিশনের ভিত্তিতে ডকুমেন্ট অনুসন্ধান করতে দেয়। এটি মূলত একাধিক কোয়েরি (Query) কে একত্রিত করে জটিল অনুসন্ধান তৈরি করতে ব্যবহৃত হয়। Bool Query-তে চারটি মেইন ক্লজ (Clause) আছে:
- must
- must_not
- should
- filter
এগুলো একসাথে ব্যবহার করে আপনি বিভিন্ন ধরনের জটিল কোয়েরি তৈরি করতে পারেন। নিচে প্রত্যেকটি ক্লজ-এর বিস্তারিত বর্ণনা এবং উদাহরণ দেওয়া হলো:
1. must
- must ক্লজে দেওয়া কোয়েরিগুলি অবশ্যই মিলতে হবে। এটি "AND" অপারেশনের মতো কাজ করে। যদি একাধিক কোয়েরি must ক্লজে থাকে, তাহলে সেই ডকুমেন্টগুলিই রিটার্ন করবে যা প্রত্যেকটি শর্ত পূরণ করে।
উদাহরণ:
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } },
{ "match": { "content": "tutorial" } }
]
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর title-এ "Elasticsearch" এবং content-এ "tutorial" আছে।
2. must_not
- must_not ক্লজটি সেই ডকুমেন্টগুলো বাদ দেয় যেগুলো এই শর্ত পূরণ করে। এটি "NOT" অপারেশনের মতো কাজ করে।
উদাহরণ:
{
"query": {
"bool": {
"must_not": [
{ "match": { "author": "unknown" } }
]
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর author ফিল্ডে "unknown" নেই।
3. should
- should ক্লজ ব্যবহার করা হয় ঐচ্ছিক শর্ত দেওয়ার জন্য। যদি একটি ডকুমেন্ট should ক্লজের অন্তত একটি শর্ত পূরণ করে, তাহলে সেই ডকুমেন্টটি ম্যাচ করবে। এটি "OR" অপারেশনের মতো কাজ করে। যদি একাধিক should ক্লজ থাকে এবং সবগুলিই পূরণ হয়, তাহলে সেই ডকুমেন্টটির স্কোর বেশি হবে।
উদাহরণ:
{
"query": {
"bool": {
"should": [
{ "match": { "tags": "Elasticsearch" } },
{ "match": { "tags": "tutorial" } }
],
"minimum_should_match": 1
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর tags ফিল্ডে "Elasticsearch" বা "tutorial" আছে।
4. filter
- filter ক্লজ ফিল্টারিংয়ের জন্য ব্যবহৃত হয় এবং এটি শর্ত পূরণ করতে হবে। must-এর মতোই কাজ করে, তবে এটি স্কোরিং (relevance score) প্রভাবিত করে না। এটি পারফরম্যান্স বৃদ্ধিতে সাহায্য করে কারণ ফিল্টার ক্যাশ করা যায়।
উদাহরণ:
{
"query": {
"bool": {
"filter": [
{ "term": { "status": "published" } }
]
}
}
}
এখানে শুধুমাত্র সেই ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর status ফিল্ডে "published" আছে।
পূর্ণাঙ্গ উদাহরণ
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } }
],
"must_not": [
{ "term": { "author": "anonymous" } }
],
"should": [
{ "match": { "tags": "tutorial" } },
{ "match": { "tags": "guide" } }
],
"filter": [
{ "term": { "status": "published" } }
]
}
}
}
উপরের উদাহরণে:
- must: ডকুমেন্টের title-এ "Elasticsearch" থাকতে হবে।
- must_not: ডকুমেন্টের author-এ "anonymous" থাকলে সেটি বাদ দেওয়া হবে।
- should: ডকুমেন্টের tags-এ "tutorial" বা "guide" থাকলে স্কোর বেশি হবে।
- filter: status ফিল্ডে "published" থাকতে হবে।
Bool Query প্রয়োগ
Bool Query Elasticsearch-এ জটিল সার্চ অপারেশন তৈরি করতে অত্যন্ত উপযোগী। উদাহরণস্বরূপ, আপনি আপনার ডাটাবেস থেকে নির্দিষ্ট কীওয়ার্ড খুঁজে বের করতে, অবাঞ্ছিত কন্টেন্ট বাদ দিতে, অথবা ফিল্টারিং করতে Bool Query ব্যবহার করতে পারেন।
Full-text এবং Structured Search Elasticsearch-এর দুটি ভিন্ন ধরনের অনুসন্ধান পদ্ধতি, এবং এদের প্রতিটির নিজস্ব ব্যবহার ক্ষেত্র রয়েছে। চলুন, এদের সম্পর্কে বিস্তারিত আলোচনা করা যাক:
1. Full-text Search
Full-text Search এমন একটি পদ্ধতি যেখানে কোন ডকুমেন্টের ভেতরের টেক্সট থেকে নির্দিষ্ট শব্দ বা কীওয়ার্ড খোঁজা হয়। এটি সাধারণত বৃহৎ পরিমাণের টেক্সট ডাটা যেমন আর্টিকেল, ব্লগ পোস্ট, প্রোডাক্ট ডেসক্রিপশন, ইত্যাদি-তে ব্যবহার করা হয়।
Elasticsearch-এর inverted index ব্যবহার করে Full-text Search পরিচালিত হয়, যা দ্রুত এবং কার্যকরীভাবে ডকুমেন্টে থাকা শব্দগুলি খুঁজে বের করতে সাহায্য করে।
উদাহরণ: যদি আপনার একটি ব্লগ ডাটাবেস থাকে এবং আপনি "Elasticsearch tutorial" কীওয়ার্ড দিয়ে সার্চ করতে চান, তাহলে Full-text Search সেই ডকুমেন্টগুলি খুঁজে বের করবে যেগুলিতে এই শব্দগুলো উপস্থিত আছে।
Full-text Search-এর ফিচার:
- অন্যান্য ভাষা সমর্থন: Elasticsearch বিভিন্ন ভাষার জন্য টোকেনাইজেশন এবং স্টেমিং সাপোর্ট করে।
- র্যাঙ্কিং এবং রিলেভেন্স স্কোর: Full-text Search ডকুমেন্টগুলির রিলেভেন্স স্কোর (যেমন, কোন ডকুমেন্ট কতটা ভালোভাবে সার্চ টার্মের সাথে মিলছে) তৈরি করে এবং সেটির ভিত্তিতে ফলাফল র্যাঙ্কিং করে।
- Fuzziness: কাছাকাছি মিল থাকা শব্দগুলিও খুঁজে বের করা যায়, যা টাইপো বা বানানের ত্রুটি সমাধান করতে সক্ষম।
Full-text Search উদাহরণ:
{
"query": {
"match": {
"content": "Elasticsearch tutorial"
}
}
}
এখানে match কোয়েরি ব্যবহার করা হয়েছে যাতে content ফিল্ডে থাকা ডকুমেন্টগুলি খুঁজে বের হয় যেগুলিতে "Elasticsearch tutorial" শব্দটি উপস্থিত রয়েছে।
2. Structured Search
Structured Search এমন এক ধরনের অনুসন্ধান যেখানে আপনার ডকুমেন্টে থাকা নির্দিষ্ট ফিল্ড বা অ্যাট্রিবিউটের উপর ভিত্তি করে সার্চ করা হয়। এটি সাধারণত এমন ডাটা খোঁজার জন্য ব্যবহার করা হয় যা স্পষ্টভাবে সংজ্ঞায়িত (structured) এবং একটি নির্দিষ্ট ফিল্ডে সংরক্ষিত থাকে। উদাহরণস্বরূপ, প্রোডাক্ট আইডি, ক্যাটেগরি, ডেট টাইম, স্ট্যাটাস ইত্যাদি।
Structured Search এর কিছু সাধারণ ব্যবহার ক্ষেত্র:
- ডকুমেন্টের নির্দিষ্ট স্ট্যাটাস অনুযায়ী ফিল্টারিং (যেমন, "published" বা "draft" স্ট্যাটাস খোঁজা)
- নির্দিষ্ট ডেট রেঞ্জের মধ্যে থাকা ডকুমেন্ট খোঁজা
- নির্দিষ্ট সংখ্যা বা মানের ভিত্তিতে ফিল্টারিং করা (যেমন, প্রোডাক্টের মূল্য একটি নির্দিষ্ট সীমার মধ্যে থাকা)
Structured Search উদাহরণ:
{
"query": {
"bool": {
"filter": [
{ "term": { "status": "published" } },
{ "range": { "price": { "gte": 100, "lte": 500 } } }
]
}
}
}
উপরের উদাহরণে:
- term ফিল্টার ব্যবহার করে শুধুমাত্র "published" স্ট্যাটাসের ডকুমেন্টগুলি খোঁজা হচ্ছে।
- range ফিল্টার ব্যবহার করে প্রোডাক্টের মূল্য ১০০ থেকে ৫০০ এর মধ্যে থাকা ডকুমেন্টগুলি ফিল্টার করা হচ্ছে।
Full-text vs. Structured Search: তুলনা
| বৈশিষ্ট্য | Full-text Search | Structured Search |
|---|---|---|
| কোয়েরি পদ্ধতি | Inverted Index ব্যবহার করে শব্দ অনুসন্ধান | ফিল্ড-ভিত্তিক সার্চ (Term, Range, ইত্যাদি) |
| ডাটা টাইপ | আনস্ট্রাকচারড বা টেক্সট ডাটা | স্ট্রাকচারড বা নির্দিষ্ট ফিল্ডভিত্তিক ডাটা |
| ফিল্ড এবং রেঞ্জ সার্পোট | সাধারণত বড় টেক্সট ফিল্ডে প্রয়োগ হয় | নির্দিষ্ট ফিল্ড (সংখ্যা, ডেট, স্ট্যাটাস) |
| রিলেভেন্স স্কোর | রিলেভেন্স স্কোর এবং র্যাঙ্কিং সমর্থন করে | সাধারণত রিলেভেন্স স্কোর প্রয়োজন হয় না |
সংক্ষিপ্ত সারমর্ম
Elasticsearch-এ Full-text Search এবং Structured Search একসাথে বা আলাদা ভাবে ব্যবহার করা যায়, যা আপনার ডাটার ওপর ভিত্তি করে দ্রুত এবং কার্যকর অনুসন্ধান করতে সাহায্য করে। Full-text Search সাধারণত বড় এবং আনস্ট্রাকচারড টেক্সট ডাটার জন্য ব্যবহার করা হয়, যেখানে Structured Search ব্যবহৃত হয় নির্দিষ্ট এবং স্ট্রাকচারড ফিল্ডের ওপর অনুসন্ধান করার জন্য।
Read more